﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using EntGuayasSLA.BL;
using EntGuayasSLA.BL.Archivos.Pdf;
using EntGuayasSLA.BL.Listas;
using EntGuayasSLA.BL.Listas.Criterias;
using Ext.Net;
using EGuayas.Web.Resources;
using System.Security.Cryptography.X509Certificates;
using EntGuayasSLA.BL.Licenciamiento;

namespace EGuayas.Web.Licenciamiento.dma
{
    //
    public partial class pgCerUpload : pgBase
    {
      
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                    if (!X.IsAjaxRequest)
                    {
                        Persona objPersona = Persona.GetEditableRoot(Guid.Parse(GetSessionUsuario.PersonaId));
                        if (objPersona.Certificado == Valores.Codigo_CHAR_Si)
                        {
                            this.btnFirmar.Hide();
                            this.forPanelDoc.Hide();
                            this.btnCancelar.Hide();
                            this.lblDetailsFirma.Text="Datos  de certificado a utilizar para la firma de documentos:";
                            string clave =Seguridad.DesEncriptar(objPersona.CertificadoClave);
                            string fileName = MapPath(string.Format("~/{0}{1}{2}", ConfigurationManager.AppSettings.Get("PathCer"), GetSessionUsuario.PersonaId, ConfigurationManager.AppSettings.Get("ExtCer")));
                            try
                            {
                                ShowWinFirma(fileName, clave, objPersona);
                            }
                            catch
                            {

                                objPersona.Certificado = Valores.Codigo_CHAR_No;
                                objPersona.Save();
                                this.btnFirmar.Show();
                                this.forPanelDoc.Show();
                                this.btnCancelar.Text = "Cancelar";
                                this.btnCancelar.Show();
                                this.lblDetailsFirma.Text = "A continuación valide los datos  del certificado a utilizar para la firma de documentos:";
                                X.Msg.Show(new MessageBoxConfig
                                {
                                    Buttons = MessageBox.Button.OK,
                                    Icon = MessageBox.Icon.ERROR,
                                    Title = "Error",
                                    Message = string.Format("{0}<br/>{1}\n", "Error", "Certificado no válido")
                                });

                            }
                        }
                    }
            }
            catch (Exception ex)
            {
                RegistrarLog(ex);
            }
        }
        protected void btnFirma_Click(object sender, DirectEventArgs e)
        {
            try
            {

                 
                    Persona objPersona = Persona.GetEditableRoot(Guid.Parse(GetSessionUsuario.PersonaId));
                    objPersona.Certificado = Valores.Codigo_CHAR_Si;
                    objPersona.CertificadoClave = Seguridad.Encriptar(e.ExtraParams["clave"]);
                    objPersona.Save();
                    this.txtClave.Disable();
                    this.FileUploadDocUp.Disable();
                    this.btnWinDocOk.Disable();
                    this.btnWinDocOk.Hide();                   
                    this.pnlDetailsFirma.Show();
                    winFirma.Close();
               
                   
                   
                
            }
            catch (Exception ex)
            {
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.ERROR,
                    Title = "Error",
                    Message = string.Format("{0}<br/>{1}\n {2}", "Error", "Error:", ex)
                });
                RegistrarLog(ex);
            }


        }
        protected void UploadClick(object sender, DirectEventArgs e)
        {
            try
            {
                FileUploadField myCtlFileUp = (FileUploadField)this.FindControl("FileUploadDocUp");
                if (myCtlFileUp.HasFile)
                {
                    string tpl = Mensajes.MensajeArchivoCorrecto;
                    string fileExt  = myCtlFileUp.PostedFile.FileName.Substring(myCtlFileUp.PostedFile.FileName.LastIndexOf('.') + 1);
                    string fileName = MapPath(string.Format("~/{0}{1}{2}", ConfigurationManager.AppSettings.Get("PathCer"), GetSessionUsuario.PersonaId, ConfigurationManager.AppSettings.Get("ExtCer")));
                    string clave = e.ExtraParams["clave"];
                    this.pnlDetailsFirma.Hide();
                    myCtlFileUp.PostedFile.SaveAs(fileName);
                    try
                    {
                        X.Js.Call("wucJsCerUp.hideBtnParent");
                        Persona objPersona = Persona.GetEditableRoot(Guid.Parse(GetSessionUsuario.PersonaId));

                        ShowWinFirma(fileName, clave, objPersona);
                    }
                    catch
                    {
                        this.txtClave.Text = "";
                        X.Msg.Show(new MessageBoxConfig
                        {
                            Buttons = MessageBox.Button.OK,
                            Icon    = MessageBox.Icon.ERROR,
                            Title   = Titulos.TituloAviso,
                            Message = Mensajes.MensajeClaveCertificadoInv
                        });
                    
                    }
                    
                  
                    
                }
                else
                {
                   
                    X.Msg.Show(new MessageBoxConfig
                    {
                        Buttons = MessageBox.Button.OK,
                        Icon    = MessageBox.Icon.ERROR,
                        Title   = Titulos.TituloAviso,
                        Message = Mensajes.MensajeArchivoIncorrecto
                    });

                }

            }
            catch (Exception ex)
            {
               
                RegistrarLog("wucLoadDoc.UploadClick" + ex);
                X.Msg.Show(new MessageBoxConfig
                {
                    Buttons = MessageBox.Button.OK,
                    Icon = MessageBox.Icon.ERROR,
                    Title = Titulos.TituloAviso,
                    Message = Mensajes.MensajeArchivoIncorrecto
                });
            }
        }

        private void ShowWinFirma(string fileName, string clave,  Persona objPersona)
        {
            X509Certificate2 objCert = Certificate.GetX509Certificate2(clave, fileName);
            var infoDetails = Certificate.ShowCertificateInfo(objCert, DateTime.Today);
            this.txtDetailsFirma.Html = "<p><b>Persona autorizada a firmar: </b>" + objPersona.Nombre + " " + objPersona.Apellido + "</p></br><b>Datos Técnicos de Certificado</b></br>" + "<p>" + infoDetails.ToString() + "</p>";
            this.pnlDetailsFirma.Html = "<p>" + infoDetails.ToString() + "</p>";
            this.winFirma.Show();
        }

       


    }


}